#!/usr/bin/env node

const fs = require("fs");
const path = require("path");
const { execSync } = require("child_process");

// 读取 package.json 文件
const packageJsonPath = path.join(__dirname, "..", "package.json");
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));

// 获取当前版本
const currentVersion = packageJson.version;
console.log(`当前版本: ${currentVersion}`);

// 解析版本号
const [major, minor, patch] = currentVersion.split(".").map(Number);

// 根据命令行参数确定要更新的版本类型
const args = process.argv.slice(2);
const versionType = args[0] || "patch"; // 默认更新补丁版本

let newVersion;

switch (versionType) {
  case "major":
    newVersion = `${major + 1}.0.0`;
    break;
  case "minor":
    newVersion = `${major}.${minor + 1}.0`;
    break;
  case "patch":
  default:
    newVersion = `${major}.${minor}.${patch + 1}`;
    break;
}

console.log(`新版本: ${newVersion}`);

// 更新 package.json 文件
packageJson.version = newVersion;
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 4) + "\n");

// 如果存在 package-lock.json，也更新它
const packageLockPath = path.join(__dirname, "..", "package-lock.json");
if (fs.existsSync(packageLockPath)) {
  const packageLock = JSON.parse(fs.readFileSync(packageLockPath, "utf8"));
  packageLock.version = newVersion;
  fs.writeFileSync(
    packageLockPath,
    JSON.stringify(packageLock, null, 2) + "\n"
  );
}

// 如果是 Git 仓库，创建提交和标签
try {
  // 检查是否是 Git 仓库
  execSync("git rev-parse --is-inside-work-tree", { stdio: "ignore" });

  // 添加更改的文件
  execSync("git add package.json");
  if (fs.existsSync(packageLockPath)) {
    execSync("git add package-lock.json");
  }

  // 创建提交
  execSync(`git commit -m "chore: 版本更新至 ${newVersion}"`);

  // 创建标签
  execSync(`git tag v${newVersion}`);

  console.log(`已创建 Git 提交和标签 v${newVersion}`);
} catch (error) {
  console.log("跳过 Git 操作，可能不是 Git 仓库或发生错误");
}

console.log(`版本已更新至 ${newVersion}`);

// 如果有额外的构建参数，执行构建
if (args.includes("--build")) {
  console.log("开始构建...");
  try {
    execSync("npm run dist:win", { stdio: "inherit" });
    console.log(
      `构建完成! 安装包位于: dist_electron/微信机器人 Setup ${newVersion}.exe`
    );
  } catch (error) {
    console.error("构建失败:", error);
    process.exit(1);
  }
}
